﻿using System;
using System.Windows.Forms;
using Habanero.Base;
using Habanero.UI.Base;
using Habanero.UI.Win;
using TreeViewEventArgs=System.Windows.Forms.TreeViewEventArgs;

namespace Firestarter.DB.Schema.UI
{
    //public class TreeViewWin : TreeView, IControlHabanero //, ITreeView
    //{
    //    public event EventHandler<BOEventArgs<IBusinessObject>> BusinessObjectSelected;

    //    public TreeViewWin()
    //    {
    //        this.AfterSelect += ((sender, e) => FireBusinessObjectSelected((IBusinessObject) e.Node.Tag));
    //    }

    //    private void FireBusinessObjectSelected(IBusinessObject businessObject)
    //    {
    //        if (BusinessObjectSelected != null)
    //        {
    //            this.BusinessObjectSelected(this, new BOEventArgs<IBusinessObject>(businessObject));
    //        }
    //    }

    //    Habanero.UI.Base.AnchorStyles IControlHabanero.Anchor
    //    {
    //        get { return (Habanero.UI.Base.AnchorStyles)this.Anchor; }
    //        set { this.Anchor = (System.Windows.Forms.AnchorStyles) value; }
    //    }

    //    IControlCollection IControlHabanero.Controls
    //    {
    //        get { return new ControlCollectionWin(base.Controls); }
    //    }

    //    Habanero.UI.Base.DockStyle IControlHabanero.Dock
    //    {
    //        get { return DockStyleWin.GetDockStyle(this.Dock); }
    //        set { this.Dock = DockStyleWin.GetDockStyle(value); }
    //    }

    //    //[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    //    //public Asset RootAsset
    //    //{
    //    //    get { return (Asset)this.Nodes[0].Tag; }
    //    //    set
    //    //    {
    //    //        this.Nodes.Clear();

    //    //        TreeNode rootNode = CreateTreeNode(value);
    //    //        this.Nodes.Add(rootNode);
    //    //        AddChildrenAssets(rootNode, value);
    //    //        rootNode.Expand();
    //    //    }
    //    //}

    //    //private static TreeNode CreateTreeNode(Asset asset)
    //    //{
    //    //    TreeNode rootNode = new TreeNode(asset.ToString());
    //    //    rootNode.Tag = asset;
    //    //    return rootNode;
    //    //}

    //    //private void AddChildrenAssets(TreeNode node, Asset asset)
    //    //{
    //    //    foreach (Asset childAsset in asset.ChildAssets)
    //    //    {
    //    //        TreeNode childNode = AddChildAssetRecursively(node, childAsset);
    //    //        childNode.Collapse(false);
    //    //    }
    //    //}

    //    //public TreeNode AddChildAssetRecursively(TreeNode node, Asset childAsset)
    //    //{
    //    //    TreeNode childNode = CreateTreeNode(childAsset);
    //    //    node.Nodes.Add(childNode);
    //    //    AddChildrenAssets(childNode, childAsset);
    //    //    return childNode;
    //    //}

    //    ///// <summary>
    //    ///// finds the asset identified 
    //    ///// </summary>
    //    ///// <param name="assetToFind"></param>
    //    ///// <returns></returns>
    //    //public TreeNode Find(Asset assetToFind)
    //    //{
    //    //    //do something
    //    //    TreeNode baseNode = this.Nodes[0];
    //    //    return FindNode(assetToFind, baseNode);
    //    //}

    //    //private static TreeNode FindNode(Asset assetToFind, TreeNode currentNode)
    //    //{
    //    //    if (IsNodeForAsset(assetToFind, currentNode))
    //    //    {
    //    //        return currentNode;
    //    //    }
    //    //    foreach (TreeNode node in currentNode.Nodes)
    //    //    {
    //    //        TreeNode foundNode = FindNode(assetToFind, node);
    //    //        if (foundNode != null)
    //    //        {
    //    //            return foundNode;
    //    //        }
    //    //    }
    //    //    return null;
    //    //}

    //    //private static bool IsNodeForAsset(Asset assetToFind, TreeNode node)
    //    //{
    //    //    return assetToFind == node.Tag;
    //    //}


    //    //        public void RemoveAsset(Asset asset)
    //    //        {
    //    ////            this.SelectedNode = this.Nodes[0].Nodes[0];

    //    //            this.Nodes.Remove(this.Nodes[0].Nodes[0]);
    //    //        }
    //    public void ExpandAllParents(TreeNode node)
    //    {
    //        node.Expand();
    //        while (node.Parent != null)
    //        {
    //            node = node.Parent;
    //            node.Expand();
    //        }
    //    }
    //}
}
